package org.example.string;

import java.util.HashSet;

/**
 * jdk 6
 * -XX:PermSize=6m -XX:MaxPermSize=20m -Xms6m -Xmx6m
 * 报错信息：java.lang.OutOfMemoryError: PermGen space
 *
 * jdk 8
 * -XX:MetaspaceSize=6m -XX:MaxMetaspaceSize=20m -Xms6m -Xmx6m
 * 报错信息：java.lang.OutOfMemoryError: Java heap space
 *
 * 结论：
 * jdk 6 及之前String table 是存放在 永久代的
 * jdk 8 String table的数据是存储在堆区的
 * @author youshang
 * @date 2022/03/27 16:55
 **/
public class StringTableStorageTest {
    public static void main(String[] args) {

        //使用Set保持着常量池引用，避免full gc回收常量池
        HashSet<String> set = new HashSet<>();

        short i = 0;
        while (true) {
            set.add(String.valueOf(i++).intern());
        }
    }
}
